#ifndef MEM_HASH
#define MEM_HASH

/* 
 * Для хранения данных о размере элемента и о том, где в настоящее время он расположен в памяти и swap'е, используется хэш-таблица.
 * Для оптимизации ее работы было бы неплохо задать HASH_TABLE_LENGTH средним значением единовременно существующих элементов.
 * Хэш-функцию тоже было бы неплохо заменить на более универсальную. 
 */

typedef struct hash_element {
     size_t id;
     size_t sz;
     int get_count;
     void *mem_addr;
     off_t swap_addr;
     struct hash_element *next;
} hash_element_t;

void hash_create_table();
/* 
 * Создает пустую хэш-таблицу. 
 */

void hash_add(size_t id, size_t sz);
/*
 * Добавляет новый элемент в таблицу.
 */

hash_element_t *hash_find(size_t id);
/*
 * Поиск элемента по ID. Возращает NULL, если элемент не найден, в противном случае возвращает указатель на него.
 */

int hash_delete(size_t id);
/*
 * Удаляет элемент. Возвращает 0, если такого элемента в таблице нет и он не был удален, в противном случае возвращает 1.
 */

void hash_remove_table();
/*
 * Удаляет хэш-таблицу.
 */
 
 #endif